package com.woniuxy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniuxy.entity.AllRole;
import com.woniuxy.entity.DTO.RoleQueryDTO;
import com.woniuxy.mapper.RoleMapper;
import com.woniuxy.service.IRoleService;
import com.woniuxy.util.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Author pml
 * @Date 2025/7/16 10:15
 * @Description 角色服务实现类
 * 实现角色相关的业务逻辑
 * 继承ServiceImpl获取基础CRUD实现
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, AllRole> implements IRoleService {

    @Autowired
    private RoleMapper roleMapper;

    /**
     * 分页多条件查询角色列表
     * 使用MyBatis-Plus的分页插件和条件构造器实现复杂查询
     * 与UserServiceImpl实现逻辑保持一致，确保系统一致性
     */
    @Override
    public PageResult<AllRole> getRoleList(RoleQueryDTO queryDTO) {
        // 创建分页对象，设置当前页码和每页数量
        // 直接使用DTO中的分页参数，无需二次处理
        Page<AllRole> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize());

        // 创建查询条件构造器
        QueryWrapper<AllRole> queryWrapper = new QueryWrapper<>();

        // 角色名称模糊查询
        // 仅当参数不为空时添加条件，避免影响其他查询条件
        if (queryDTO.getRoleName() != null && !queryDTO.getRoleName().isEmpty()) {
            queryWrapper.like("role_name", queryDTO.getRoleName());
        }

        // 角色描述模糊查询
        if (queryDTO.getRoleDesc() != null && !queryDTO.getRoleDesc().isEmpty()) {
            queryWrapper.like("role_desc", queryDTO.getRoleDesc());
        }

        // 创建时间范围查询
        if (queryDTO.getCreaterTimeStart() != null) {
            queryWrapper.ge("creater_time", queryDTO.getCreaterTimeStart());
        }
        if (queryDTO.getCreaterTimeEnd() != null) {
            queryWrapper.le("creater_time", queryDTO.getCreaterTimeEnd());
        }

        // 按创建时间降序排序
        // 最新创建的角色排在前面，符合用户操作习惯
        queryWrapper.orderByDesc("creater_time");

        // 执行分页查询
        // 使用MyBatis-Plus的分页插件自动计算总记录数和总页数
        IPage<AllRole> rolePage = roleMapper.selectPage(page, queryWrapper);

        // 封装分页结果
        // 转换为自定义的PageResult对象，统一API返回格式
        PageResult<AllRole> pageResult = new PageResult<>();
        pageResult.setPageNum(queryDTO.getPageNum());
        pageResult.setPageSize(queryDTO.getPageSize());
        pageResult.setTotal(rolePage.getTotal());
        pageResult.setPages((int) rolePage.getPages());
        pageResult.setList(rolePage.getRecords());

        return pageResult;
    }
}